De vraag is simpel: bestaat er een php functie waarbij je procent tekens in een array kunt vervangen door meegegeven functie variabelen? Zelfde principe als de sprintf functie dus, maar dan in combinatie met een array in plaats van met een string.

Hier wil ik het namelijk in toepassen:

<?php

class AnimalPropertyLinksController extends CoasterCmsAppController
{
public $paginate = array(
'AnimalPropertyLink' => array(
'conditions' => array(
'Animal.id' => '%b',
'AnimalPropertyLink.deleted' => null
),
'order' => array(
'AnimalProperty.sequence' => 'ASC',
'AnimalProperty.id' => 'ASC'
),
'limit' => 50
)
);

public function index()
{
$this->Paginator->settings = sprintf($this->paginate, $this->request->params['named']['animal_id']);

$properties = $this->Paginator->paginate('AnimalPropertyLink');

$this->set('properties', $properties);
}
?>
str_replace() kan ook met array's werken:

<?php
$zoek = array("%", "procent");
$vervang = array("per 100", "/100");

$tekst[] = "Ik heb 50% verkocht";
$tekst[] = "Hij verkocht 50 procent";
$tekst[] = "Wij samen verkochten 100%";

echo str_replace($zoek, $vervang, $tekst);
?>

Je hoeft dus niet met (s)printf() te werken.
Kan wel, al kan je dan beter met een foreach() werken. Ik zie er, in dit geval, geen voordelen in.


[size=xsmall]Toevoeging op 30/08/2015 10:05:11:[/size]

Een eigen functie is helemaal niet nodig.
Het zou niets meer zijn dan str_replace(). En voor het gemak zou je eigen functie dezelfde syntax krijgen...
Bedankt voor de moeite Eddy! Ik zoek echter een oplossing om variabelen in een klasse property te kunnen stoppen. Als er geen manier bestaat om dit via een array te doen, dan zie ik niet meteen een duidelijke manier om dit aan te pakken.
Misschien een optie om eerst van een array json te maken en vervangen en vervolgens weer een array ervan maken?
Gho, dan denk ik toch dat dit een behoorlijke omweg is voor hetgeen ik wil bereiken. Ik kan uiteraard de array uiteraard meteen in m'n index actie uitvoeren in plaats van de array in een klasse property te stoppen. Maar dan wordt het weer een stuk onoverzichtelijk natuurlijk :)
Misschien ligt het aan mij, maar wat is precies de bedoeling?

Variabelen in een klasse-eigenschap te stoppen is het reguliere gebruik van variabelen, alleen zijn de dan gegroepeerd in een class. Je kunt een associatieve array gebruiken als waarde van een variabele.

Als je een associatieve, nested array wilt gebruiken met een bestaande find-and-replace -functie, of elke andere functie, dan kun je dat doen in combinatie met array_walk().

Reageren